package main

import "fmt"

type person struct {
	name string
	age  int
}

func (p *person) birthday() {
	p.age++
}

// 指针接收者
func main() {
	terry := &person{
		name: "Terry",
		age:  15,
	}
	terry.birthday()
	fmt.Printf("%+v\n", terry) // &{name:Terry age:16}

	nathan := person{
		name: "Nathan",
		age:  17,
	}
	// Go 语言在变量通过点标记法(.)进行调用的时候，自动使用 & 取得变量的内存地址
	// 所以不用写 (&nathan).birthday() 这种形式也可以正常运行。
	nathan.birthday()
	fmt.Printf("%+v\n", nathan) // {name:Nathan age:18}

	(&nathan).birthday()
	fmt.Printf("%+v\n", nathan) // {name:Nathan age:19}

}
